/**
 * @projectName: java-daily-questions
 * @package: PACKAGE_NAME
 * @className: Operators
 * @author: ZM
 * @description: 运算符 - demo
 * @date: 2021/8/16 11:50
 * @version: 1.0
 */
public class Operators {

    public static void main(String[] args) {
        // |(按位或)       0|0=0； 0|1=1； 1|0=1； 1|1=1 同零为零，否则为1
        int a = 12 | 21;
        System.out.printf("number 12 binary：%s\n", Integer.toBinaryString(12));
        System.out.printf("number 21 binary：%s\n", Integer.toBinaryString(21));
        System.out.printf("12 | 21 result：%d，binary：%s\n\n", a, Integer.toBinaryString(a));

        // &(按位与)       0&0=0; 0&1=0; 1&0=0; 1&1=1 同一为一，不同为零
        // 负数按补码形式参加按位与运算
        int b = 12 & 21;
        System.out.printf("number 12 binary：%s\n", Integer.toBinaryString(12));
        System.out.printf("number 21 binary：%s\n", Integer.toBinaryString(21));
        System.out.printf("12 & 21 result：%d，binary：%s\n\n", b, Integer.toBinaryString(b));

        // 异或运算符（^）  0^0=0； 0^1=1； 1^0=1； 1^1=0  相同为零，不同为一
        int c = 12 ^ 21;
        System.out.printf("number 12 binary：%s\n", Integer.toBinaryString(12));
        System.out.printf("number 21 binary：%s\n", Integer.toBinaryString(21));
        System.out.printf("12 ^ 21 result：%d，binary：%s\n\n", c, Integer.toBinaryString(c));

        // 取反运算符（~） ~1=0； ~0=1 取反
        int d = ~12;
        System.out.printf("number 12 binary：%s\n", Integer.toBinaryString(12));
        System.out.printf("~12 result：%d，binary：%s\n\n", d, Integer.toBinaryString(d));

        // 左移运算符（<<）    将一个运算对象的各二进制位全部左移若干位（左边的二进制位丢弃，右边补0）。
        // 操作数每左移一位，相当于该数乘以2。
        int e = 12 << 2;
        System.out.printf("number 12 binary：%s\n", Integer.toBinaryString(12));
        System.out.printf("number 2 binary：%s\n", Integer.toBinaryString(2));
        System.out.printf("12 << 2 result：%d，binary：%s\n\n", e, Integer.toBinaryString(e));

        // 右移运算符（>>）    将一个数的各二进制位全部右移若干位，正数左补0，负数左补1，右边丢弃。
        // 操作数每右移一位，相当于该数除以2。
        int f = 12 >> 2;
        System.out.printf("number 12 binary：%s\n", Integer.toBinaryString(12));
        System.out.printf("number 2 binary：%s\n", Integer.toBinaryString(2));
        System.out.printf("12 >> 2 result：%d，binary：%s\n\n", f, Integer.toBinaryString(f));


    }
}
